package thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程池
 * 线程池是线程的管理机制，主要解决两方面的问题:
 * 1:重复使用·线程，避免浪费
 * 2:控制线程数量，避免资源过度消耗，以及CPU过渡切换导致卡顿等问题
 */
public class ThreadPoolDemo {
    //创建具有两条线程的线程池
    public static void main(String[] args) {
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        for (int i = 0; i < 5; i++) {
            Runnable r = ()->{

                    try {
                        Thread t = Thread.currentThread();
                        System.out.println(t.getName()+"正在执行一个任务...");
                        Thread.sleep(5000);
                        System.out.println(t.getName()+"执行任务完毕...");
                    }catch (Exception e){
                        e.printStackTrace();
                    }

            };
            threadPool.execute(r);
            System.out.println("将一个任务交给了1线程池");
        }
        //线程池不再接受新任务，线程池内部任务都执行完毕后接受
       // threadPool.shutdown();//停止线程池

        //线程池会立即调用所有内部线程的中断方法让线程池尽快停止
        threadPool.shutdownNow();
        System.out.println("停止线程池");
    }
}
